package com.hsl.study.leetcode.study;


import java.util.*;
import java.util.stream.Collectors;

/**
 * @author HSL
 * @version 1.0
 * @data 2025/11/14 16:20
 * @desc todo
 */

public class Solution {

    public boolean isPalindrome(int x) {
        String string = String.valueOf(x);
        boolean flag = true;
        for (int i = 0; i < string.length() / 2; i++) {
            if (string.charAt(i) != string.charAt(string.length() - 1 - i)) {
                flag = false;
            }
        }
        return flag;
    }

    public static int romanToInt(String s) {
        Map<Character, Integer> romanMap = new HashMap<>();
        romanMap.put('I', 1);
        romanMap.put('V', 5);
        romanMap.put('X', 10);
        romanMap.put('L', 50);
        romanMap.put('C', 100);
        romanMap.put('D', 500);
        romanMap.put('M', 1000);

        int total = 0;
        int n = s.length();

        for (int i = 0; i < n; i++) {
            int currentValue = romanMap.get(s.charAt(i));

            // 如果当前字符不是最后一个，且当前值小于下一个值
            if (i < n - 1 && currentValue < romanMap.get(s.charAt(i + 1))) {
                total -= currentValue;
            } else {
                total += currentValue;
            }
        }

        return total;
    }

    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }

        // 以第一个字符串为基准
        String first = strs[0];

        for (int i = 0; i < first.length(); i++) {
            char currentChar = first.charAt(i);

            // 检查其他字符串在相同位置上的字符
            for (int j = 1; j < strs.length; j++) {
                // 如果当前字符串长度不够，或者字符不匹配
                if (i >= strs[j].length() || strs[j].charAt(i) != currentChar) {
                    return first.substring(0, i);
                }
            }
        }

        // 如果第一个字符串就是最长公共前缀
        return first;
    }

    public static boolean isValid(String s) {
        // 边界条件
        if (s.length() == 0) return true;
        if (s.length() % 2 != 0) return false;

        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            // 如果是左括号，压入栈
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            }
            // 如果是右括号
            else {
                // 如果栈为空，说明没有对应的左括号
                if (stack.isEmpty()) {
                    return false;
                }

                char top = stack.pop();
                // 检查是否匹配
                if ((c == ')' && top != '(') ||
                        (c == ']' && top != '[') ||
                        (c == '}' && top != '{')) {
                    return false;
                }
            }
        }

        // 最后栈应该为空
        return stack.isEmpty();
    }

    public static void main(String[] args) {
       String s = "([]{}";
       System.out.println(isValid(s));


    }
}
